2280

11 分钟

#C 语言标准库头文件 setjmp.h

这个头文件提供 非局部跳转 的相关功能,例如遇到错误时进行跳出。

#示例

#include <stdio.h> #include <setjmp.h> #include <stdlib.h> // 定义一个跳转缓冲区 jmp_buf jump_buffer; void function_with_error(int condition) { printf("进入可能出错的函数\n"); if (condition) { printf("检测到错误条件,准备跳转\n"); // 跳转回setjmp的位置,并返回非0值 longjmp(jump_buffer, 1); } printf("正常执行完毕\n"); } int main(void) { // 设置跳转点 int ret = setjmp(jump_buffer); if (ret == 0) { printf("第一次调用setjmp,准备调用可能出错的函数\n"); function_with_error(0); // 正常调用 function_with_error(1); // 会触发跳转 } else { printf("从longjmp返回,错误码: %d\n", ret); printf("执行错误处理流程...\n"); } printf("程序继续执行...\n"); // 另一个示例:模拟异常处理 if (setjmp(jump_buffer)) { printf("捕获到异常\n"); } else { printf("尝试执行可能抛出异常的代码\n"); // 模拟异常 longjmp(jump_buffer, 42); } return 0; }

运行结果:

第一次调用setjmp,准备调用可能出错的函数
进入可能出错的函数
正常执行完毕
进入可能出错的函数
检测到错误条件,准备跳转
从longjmp返回,错误码: 1
执行错误处理流程...
程序继续执行...
尝试执行可能抛出异常的代码
捕获到异常

#类型

类型标准说明
jmp_bufC89用于跳转的执行上下文

#

标准说明
setjmpC89保存用于跳转的执行上下文

#函数

标准说明
longjmpC89跳转到指定的执行上下文,跳转后无法返回

#推荐阅读

创建于 2025/6/13

更新于 2025/6/30